
// ***************************************************************************************
// PC 테스트용 
// 동작: console.log 출력 
// ***************************************************************************************

hybrid.debug = function(funcname,msg) {
	if (hybrid.device== 'pc' || hybrid.device== 'unknown') {
		console.log('['+funcname+'] '+msg);
	}
}

// ***************************************************************************************
// 공통
// 동작: 커스텀 이벤트 생성 
// window.addEventListener("이벤트이름", 호출함수이름(), false); 로 이벤트 리스너 설정 후 사용
// ***************************************************************************************

hybrid.fireEvent = function (name, target) {
	//Ready: create a generic event
	var evt = document.createEvent("Events")
	//Aim: initialize it to be the event we want
	evt.initEvent(name, true, true); //true for can bubble, true for cancelable
	//FIRE!
	target.dispatchEvent(evt);
	hybrid.debug( 'hybrid.fireEvent', 'event='+name);
}

// ***************************************************************************************
// 공통
// 동작: hybrid 객체 init
// ***************************************************************************************

hybrid.init = function() {
	hybrid.device = hybrid.checkBrowser();
    hybrid.fireEvent('onHybridInit',document);
}

// ***************************************************************************************
// 공통 
// 동작: 브라우저 체크 
// ***************************************************************************************

hybrid.checkBrowser = function() {
    
    var agent=navigator.userAgent.toLowerCase();
        
    // android 검증해야함  
    if (agent.indexOf('iphone')!=-1) {
        return 'iphone';
    } else if (agent.indexOf('ipad')!=-1) {
        return 'ipad';
    } else if (agent.indexOf('ipod')!=-1) {
        return 'ipod';
    }
    else if (agent.indexOf('android')!=-1) {
        return 'android';
    }
    
    return 'pc';
}

// ***************************************************************************************
// 공통
// 동작: 화면 이동 스크립트  
// ***************************************************************************************

hybrid.moveTo = function(command,classname,url)
// 화면 호출용 
{
    // 폰에서 테스트 할때(네이티브 앱으로 판단)
    if (hybrid.device != 'pc') {
         if( command =='activity' || command =='modal') {
             location.href = 'jscall://?command=' + command + '&class=' + classname + '&url=' + url;
         } else if (command=='nativeUICall') {
             location.href = 'jscall://?command=' + command + '&class=' + classname + '&xml=' + url; 
         }
        // PC 테스트 모드로 판단
    } else {
        if( command =='activity' || command =='modal') {
            location.href = url;
        } else if (command =='nativeUICall') {
            alert('PC에서는 테스트 할 수 없습니다');
        }
    } 
}

// ***************************************************************************************
// 공통
// 동작: 앱과의 데이터 교환 스크립트  
//      교환이 성공하면 결과값이 hybrid.appJSON에 저장됩니다.
// ***************************************************************************************

hybrid.getJsonData = function(type)
// 화면 호출용 
{
    // 폰에서 테스트 할때(네이티브 앱으로 판단)
    if (hybrid.device != 'pc') {
        location.href = 'jscall://?command=getJSON&type='+type;
     // PC 테스트 모드로 판단
    } else {
        hybrid.debug('hybrid.getJsonData','앱과 연동할 수 없습니다');
    } 
}

hybrid.setJsonData = function(type,data)
// 화면 호출용 
{
     // 폰에서 테스트 할때(네이티브 앱으로 판단)
    if (hybrid.device != 'pc') {
        location.href = 'jscall://?command=setJSON&type=' + type + '&data=' + data;
     // PC 테스트 모드로 판단
    } else {
        hybrid.debug('hybrid.setJsonData','앱과 연동할 수 없습니다');
    }
}

// ***************************************************************************************
// 공통 
// 동작: get방식으로 request된 데이터 추출  
// ***************************************************************************************

hybrid.getParameter = function( name )
{
        var rtnval = '';
        var nowAddress = decodeURI(location.href);
        var parameters = (nowAddress.slice(nowAddress.indexOf('?')+1,nowAddress.length)).split('&');
   		hybrid.debug('hybrid.getParameter','addr:' + nowAddress);
   		hybrid.debug('hybrid.getParameter','parameters:' + parameters);
   		
   		for(var i = 0 ; i < parameters.length ; i++)
        {
            var varName = parameters[i].split('=')[0];
            if(varName.toUpperCase() == name.toUpperCase())
            {
                rtnval = parameters[i].split('=')[1];
                break;
            }
        }
       return rtnval;
}
// ***************************************************************************************
// 공통 
// 동작: 로컬 json 파일 로딩 
// ***************************************************************************************
hybrid.file.load = function (fname) {
	hybrid.fileRequest=new XMLHttpRequest();
	hybrid.fileRequest.onreadystatechange =  hybrid.file.processReqChange;
	hybrid.debug( 'hybrid.file.load', 'init ok');
	hybrid.fileRequest.open('GET', fname , true);
	hybrid.fileRequest.send(null);
	hybrid.debug( 'hybrid.file.load', 'start');
}
// ***************************************************************************************
// 공통 
// 동작: 로컬 json 파일 로딩 완료시 호출되는 함수 
// ***************************************************************************************

hybrid.file.processReqChange= function (req) {
    // only if req shows "loaded"
    if ( hybrid.fileRequest.readyState == 4) {
    	hybrid.debug( 'hybrid.file.processReqChange', 'file loading success!!!');
		processFileOK(hybrid.fileRequest.responseText);
    }
}

// ***************************************************************************************
// 전문 정의용(PC 테스트)
// 동작: HTTP 헤더 셋팅 
// ***************************************************************************************

hybrid.com.setCommHeader = function (r,TrCode) {
    r.open('POST', hybrid.serverAddr, true);
    r.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    r.setRequestHeader("Data-Type", "JSON");
    r.setRequestHeader("TrCode", TrCode);
    return r;
}

// ***************************************************************************************
// 전문 정의용(PC 테스트)
// 동작: 통신소켓 Init
// ***************************************************************************************

hybrid.com.init = function() {
	hybrid.postRequest =new XMLHttpRequest();
	hybrid.postRequest.onreadystatechange =  hybrid.com.processReqChange;
	hybrid.debug( 'hybrid.com.init ', 'init ok');
}

// ***************************************************************************************
// 전문 정의용(PC 테스트)
// 동작: JSON 헤더 생성  
// 수정 필요합니다!!!!!
// ***************************************************************************************
hybrid.com.makeHeader = function() {
	var ret =  ',"head":{"systemVersion":"4.2","rtYn":"","rtCd":"","systemName":"iPhone OS","appVersion":"1.0","rtMsg":"","deviceMd":"iPhone Simulator","deviceId":"129CDA4C-F319-5410-B357-B1156B1311DB","phoneNo":""},';
	ret = ret + '"staffInfo":{"dpcd":"0000010","empNo":"0000001","email":"asgkorea@asgkorea.co.kr","empNm":"asgkorea","phoneNo":"010-8377-5269"}';
	return ret;
}

// ***************************************************************************************
// 전문 정의용(PC 테스트)
// 동작: 데이터 전송 상태 체크  
// ***************************************************************************************

hybrid.com.processReqChange = function(req) {
    // only if req shows "loaded"
    if ( hybrid.postRequest.readyState == 4) {
        // only if "OK"
        if ( hybrid.postRequest.status == 200) {
    		processOK(encodeURI(hybrid.postRequest.responseText));
    		hybrid.debug('hybrid.com.processReqChange',hybrid.postRequest.responseText);
        } else {
            alert("There was a problem retrieving the JSON data:\n" +
            hybrid.postRequest.statusText);
        }
    }
}

// ***************************************************************************************
// 아래는 지우지 말아요!!!
// 공통
// 동작: JS 파일 로딩이 끝났음을 알리는 커스텀 이벤트 생성 
// window.addEventListener("onHybridLoad", onHybridLoad(), false); 로 이벤트 리스너 설정 후 사용
// ***************************************************************************************
hybrid.ready = true;
hybrid.init();
hybrid.fireEvent('onHybridReady',document);
